/**
 * 使用promise封装axios 封装网络请求
 */
// 导入axios
import axios from 'axios'
// 这里要用到vant，所以引入一下，请提示
import { Toast } from 'vant'

// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    Toast.loading({
      duration: 0, //使用了 Toast.loading 显示加载中提示，并设置了 duration: 0 使其持续显示直到手动清除(要在后面请求成功时和请求失败时包括添加响应器失败时都要加--清除加载提示)
      message: '加载中...',
      forbidClick: true, // 禁用背景点击
    })
    //设置请求头
    config.headers.Authorization =
      'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdHVkZW50SWQiOiIwIiwiY29tcGFueWlkIjoiMSIsImxvZ2luTmFtZSI6IuiLj-ays-S6kSIsImNhbXB1c0lkIjoiMTgiLCJ1c2VyVHlwZSI6IkNPTVBBTlkiLCJjYW1wdXNpZHMiOiJbMTgsN10iLCJleHAiOjE3NTc4NDA5NTJ9.YTu2RicWVI4G_MhN6yeaa_Om6XiYFtzf_edJv2-dIL0'
    config.baseURL = process.env.VUE_APP_BASE_API_URL
    return config
  },
  function (error) {
    // 对请求错误做些什么
    Toast.clear() //关掉加载提示
    return Promise.reject(error)
  }
)

// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    Toast.clear() // 请求成功会清除加载提示
    return response
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    Toast.clear() // 请求失败也会清除加载提示
    console.log('响应错误error', error)
    if (error.code == 'ECONNABORTED' || error.code == 'ERR_NETWORK') {
      Toast.fail('网络请求超时')
    }

    return Promise.reject(error)
  }
)

export const http = (url, params = {}, data = {}, method = 'get') => {
  return new Promise((resolve, reject) => {
    // 发送 POST 请求
    axios({
      method, // 请求方法为POST
      url, // 请求的URL地址
      data, // 请求体数据
      params,
      timeout: 8000,
    })
      .then(function (response) {
        // console.log(response);
        resolve(response)
      })
      .catch(function (error) {
        // console.log(error);
        reject(error)
      })
  })
}

// get请求
export const get = (url, params = {}, data = {}) => {
  return http(url, params, data, 'get')
}
// post请求
export const post = (url, data = {}) => {
  return http(url, data, 'post')
}
